var gulp = require('gulp');
var browserify = require('browserify');
var babelify = require('babelify');
var source = require('vinyl-source-stream');
var sass = require('gulp-sass');
var plumber = require('gulp-plumber');//事件
var notify = require('gulp-notify');//错误
var uglify = require('gulp-uglify');//压缩
var streamify = require('gulp-streamify');
var webserver = require('gulp-webserver');//服务
var watchify = require('watchify');
var gutil = require('gulp-util');
var assign = require('object-assign');
// 在这里添加自定义 browserify 选项
var customOpts = {
    entries: ['./source/app.js'],
    debug: true
};
var opts = assign({}, watchify.args, customOpts);
var b = watchify(browserify(opts));
// 在这里加入变换操作
// 比如： b.transform(coffeeify);
b.transform(babelify);
gulp.task('watchSource', bundle); // 这样你就可以运行 `gulp watchSource` 来编译文件了
b.on('update', bundle); // 当任何依赖发生改变的时候，运行打包工具
b.on('log', gutil.log); // 输出编译日志到终端
function bundle() {
    return b.bundle()
        // 如果有错误发生，记录这些错误，按照教程写的bind并不能用
        .on('error', gutil.log)
        // 删掉了没有用到的buffer和sourcemaps等内容
        // 增加压缩代码uglify，在下方的pipe，当需要压缩代码是取消下方的注释
        .pipe(source('oni.js'))
        //需要压缩就打开
        //.pipe(streamify(uglify()))
        .pipe(gulp.dest('./build'));
}
gulp.task('buildCSS', function () {
    gulp.src('./style/app.scss')
        .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')}))
        .pipe(sass())
        .pipe(gulp.dest('./build'))
});
gulp.task('watchStyle', function () {
    gulp.watch('./style/**/*',['buildCSS'])
})
gulp.task('webserver', function () {
    gulp.src('build').pipe(webserver({
        port:8897,
        fallback: 'index.html',
        open:true
        //host:'172.16.9.68' 可设置成本机ip供联网调试
    }))
});
gulp.task('default',['watchSource','watchStyle','webserver']);

